<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * 返回jsonp格式数据
 */
function jsonPCallback($output, $callback)
{
    header("Content-type: text/html; charset=utf-8");
    header('Content-Type: text/javascript');
    die($callback . '(' . json_encode($output, JSON_UNESCAPED_UNICODE) . ');');
}

/**
 * 返回jsonp请求或者Ajax请求数据
 */
function _callback($output)
{

    //请求类型判断
    //
    if (input('?callback')) {
        jsonPCallback($output, input('callback'));
    } else {
        header("Content-type: text/html; charset=utf-8");
        echo json_encode($output, JSON_UNESCAPED_UNICODE);
    }
}
// +------------------------
// | ThinkPHP信息封装处理 []
// +------------------------
/**
 * [json_return json]
 * 字符串格式封装函数
 *
 * @param  int    $code    [状态码]
 * @param  string $msg     [提示信息]
 * @param  array  $data    [返回信息数组]
 * @return string          [json格式字符串]
 */
function jsonReturn($code, $msg, $data = array())
{

    isType($code, "integer");
    isType($msg, "string");

    $result = array(
        "code" => $code,
        "msg"  => $msg,
        "data" => $data,
    );
    return (json_encode($result, JSON_UNESCAPED_UNICODE));
}
// +----------------------
// | ThinkPHP数据类型判断
// +----------------------
/**
 * [isType 数据类型函数]
 *
 * @param         $data    [数据]
 * @param  string $type    [数据类型]
 * @return boolean         [匹配结果]
 */
function isType($data, $type)
{

    try {
        //PHP数据类型枚举,$type类型匹配,$data数据类型匹配
        $_array = array("boolean", "integer", "double", "string", "array", "object", "resource", "NULL", "unknown type");

        if (("string" != gettype($type)) || (!in_array($type, $_array))) {
            throw new \think\Exception("Param2 is not string or error name. ");
        }

        if ($type == gettype($data)) {
            return true;
        } else {
            throw new \think\Exception("The Data Type is not " . $type);
        }
    } catch (\Exception $e) {
        throw new \think\Exception($e->getMessage());
    }
}
/**
 * 获取请求参数
 * [参考] https://www.kancloud.cn/manual/thinkphp5/158834
 * @return   array 请求参数
 */
function getReq()
{

    //获取请求对象模块、控制器、操作名称
    $request      = \think\Request::instance();
    $rtn['ip']    = $request->ip();
    $rtn['param'] = $request->except(['_dc']);

    $rtn['module']     = $request->module();
    $rtn['controller'] = $request->controller();
    $rtn['action']     = $request->action();

    return ($rtn);
}
/**
 * array_column函数
 * PHP 5.5以下版本
 */
if (!function_exists('array_column')) {
    function arrayColumn(array $input, $columnKey, $indexKey = null)
    {
        $array = array();
        foreach ($input as $value) {
            if (!isset($value[$columnKey])) {
                trigger_error("Key \"$columnKey\" does not exist in array");
                return false;
            }
            if (is_null($indexKey)) {
                $array[] = $value[$columnKey];
            } else {
                if (!isset($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not exist in array");
                    return false;
                }
                if (!is_scalar($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not contain scalar value");
                    return false;
                }
                $array[$value[$indexKey]] = $value[$columnKey];
            }
        }
        return $array;
    }
}
/**
 * [convert description]
 * @DateTime 2017-11-22
 * @param    number $size 文件字节大小
 * @return   string
 */
function convert($size)
{
    $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
    return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}

/**
 * 加载配置文件 支持格式转换 仅支持一级配置
 * @param string $file 配置文件名
 * @param string $parse 配置解析方法 有些格式需要用户自己解析
 * @return array
 */
function loadConfig($file, $parse = CONF_PARSE)
{
    $ext = pathinfo($file, PATHINFO_EXTENSION);
    switch ($ext) {
        case 'php':
            return include $file;
        case 'ini':
            return parse_ini_file($file);
        case 'yaml':
            return yaml_parse_file($file);
        case 'xml':
            return (array) simplexml_load_file($file);
        case 'json':
            return json_decode(file_get_contents($file), true);
        default:
            if (function_exists($parse)) {
                return $parse($file);
            } else {
                E(L('_NOT_SUPPORT_') . ':' . $ext);
            }
    }
}
